Skip to content

Conversation

@EricGustin
Copy link
Member

@EricGustin EricGustin commented Dec 2, 2025

Documentation for ArcadeAI/arcade-mcp#696

Two new pages:

  1. A page that shows how to protect your HTTP server
  2. A page that disambiguates server-level auth and tool-level auth

Update one page:

  1. Updates the 'Securing Arcade MCP' page to reference protecting your server with front-door auth

Note

Adds docs and examples for securing HTTP MCP servers with OAuth 2.1 resource server auth, clarifies server- vs tool-level auth, and updates navigation and securing guide.

  • Docs (Build Tools):
    • New guide app/en/home/build-tools/secure-your-mcp-server/page.mdx:
      • Explains OAuth 2.1 Resource Server auth; includes examples for ResourceServer, multiple AuthorizationServerEntry, env var config, and JWKSTokenValidator.
      • Covers OAuth discovery endpoint, 401 responses, testing, advanced validation options, supported algorithms, and common AS configs.
    • New comparison page app/en/home/build-tools/server-level-vs-tool-level-auth/page.mdx:
      • Differentiates server-level vs tool-level auth with examples, when-to-use guidance, combined flow, and FAQs.
  • Docs (Serve Tools):
    • Updated app/en/home/serve-tools/securing-arcade-mcp/page.mdx to add OAuth Resource Server Authentication section and link to the new guide.
  • Navigation:
    • Updated app/en/home/build-tools/_meta.tsx to add secure-your-mcp-server and server-level-vs-tool-level-auth entries.

Written by Cursor Bugbot for commit bbbc0fd. This will update automatically on new commits. Configure here.

@vercel
Copy link

vercel bot commented Dec 2, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
docs Ready Ready Preview Comment Dec 2, 2025 10:14pm

@EricGustin EricGustin changed the title Add 'Secure Your MCP Server with OAuth' page Add server-level auth documentation Dec 2, 2025
@EricGustin EricGustin changed the title Add server-level auth documentation Add docs for server-level auth Dec 2, 2025
@EricGustin EricGustin marked this pull request as ready for review December 3, 2025 00:13
"providing-useful-tool-errors": "Providing useful tool errors",
"retry-tools-with-improved-prompt": "Retry tools with improved prompt",
"call-tools-from-mcp-clients": "Call tools from MCP clients",
"secure-your-mcp-server": "Secure Your MCP Server with OAuth",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You probably want to pull in main and merge this with https://docs.arcade.dev/en/home/serve-tools/securing-arcade-mcp

import { Steps, Tabs, Callout } from "nextra/components";

# Adding Resource Server Authentication to Your MCP Server

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is rather technical - I think we should start with something a little higher level (so... you want to deploy this thing, but need to protect it...). I think you can steal from https://docs.arcade.dev/en/home/serve-tools/securing-arcade-mcp

Resource Server authentication solves this by:

1. **Authenticating every request** - Validates the Bearer token before processing any MCP messages
2. **Extracting user identity** - The token's `sub` claim becomes the `context.user_id` for tool execution
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice


1. **Authenticating every request** - Validates the Bearer token before processing any MCP messages
2. **Extracting user identity** - The token's `sub` claim becomes the `context.user_id` for tool execution
3. **Enabling secure tools** - Tools requiring authorization or secrets can now safely execute over HTTP
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
3. **Enabling secure tools** - Tools requiring authorization or secrets can now safely execute over HTTP
3. **Enabling secure tools** - Tools requiring authorization or secrets can now safely execute over HTTP - but authenticated tools will still require authenticating to the downstream service

Comment on lines +118 to +132
resource_server = ResourceServer(
canonical_url="http://127.0.0.1:8000/mcp",
authorization_servers=[
AuthorizationServerEntry(
authorization_server_url="https://your-workos.authkit.app",
issuer="https://your-workos.authkit.app",
jwks_uri="https://your-workos.authkit.app/oauth2/jwks",
algorithm="RS256",
# Authkit doesn't set the aud claim as the MCP server's canonical URL
validation_options=AccessTokenValidationOptions(
verify_aud=False,
),
)
],
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's not so bad at all!

Comment on lines +8 to +10
# Server-Level vs Tool-Level Authorization

Arcade MCP servers support two distinct layers of authorization that work together to provide comprehensive security. Understanding the difference is crucial for building secure, production-ready MCP servers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This page is a very good idea!

Comment on lines +65 to +66
<Tabs items={["ResourceServer (Recommended)", "JWKSTokenValidator (Simple)"]}>
<Tabs.Tab>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to talk about how things work when you arcade deploy too - in that we handle all of this for you (always be selling). Can arcade deploy be the first tab?

| **Required for** | HTTP servers in production | Tools that access user data from APIs |
| **Configuration** | `MCPApp(auth=resource_server)` | `@app.tool(requires_auth=GitHub(...))` |

## Resource Server Authentication (Server-Level)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again, talk about how if you arcade deploy, we handle this all for you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants